# Python结构数据类型
# # 创建集合set,set()用来创建集合的函数,type()用来查看数据类型
# 1.可以使用大括号来进行创建
s = {1,2,3,4}
# 2.使用set()函数来进行创建
ss = set('1234')
print(type(s))
print(type(ss))
# 集合的添加和删除
# 添加元素
s.add(6)
print(s)
# 删除集合中第一个元素
s.pop()
print(s)
# 删除集合中的元素
s.remove(4)
print(s)
#
# # 创建元组
# 创建空元组
tuple = ()
print(tuple1)
# 创建带有元素的元组，可以有元素类型
tuple2 = ()
print(tuple2)
# 创建只有一个元素的元组
tuple3 = ()
print(tuple3)
#
# # 使用tuple()函数将其它数据类型转换为元组类型。
#   语法格式：tuple(数据)
#   将字符串转换成元组
tuple1 = tuple('hello,word')
print(tuple1)
#   将列表转换成元组
list1 = ['Python','Java','C++','C']
tuple2 = tuple(list1)
print(tuple2)
#
# 从开始索引开始截取，截至到结束索引之前。
tuple1 = ('h','e','l','l','o')
# # 使用索引访问元组中的某个元素
# 使用正数索引，从0开始
print(tuple1[2])
# 使用负数索引，倒序从-1开始
print(tuple1[-4])
#
# # 使用切片访问元素中的一组元素,前闭后开
# 使用正数切片
print(tuple1[1:4])
# 指定步长
print(tuple1[1:4:2])
# 使用负数切片
print(tuple1[-5:-1])
#
# 修改元组元素
# tuple1 = (12,34,56)
# tuple2 = ('abc','mn')
# 修改元素元素操作是非法的
# tuple1[0] = 100
# tuple1[0] = 200
# 连接元组创建一个新的元组，两个数据必须都是元组
# 字符串如a,b同样也用加号连接
# tuple3 = tuple1 + tuple2
# print(tuple3)
#
# 元组的删除del
# t1 = (12,34,56[4,5,6])
# print(t1)
# del t1
# print(t1)
#
# 任务1
# n = input('请输入联系人姓名:')
# t = input('请输入13位手机号:')
# e = input('请输入邮箱地址:')
# a = input('请输入联系地址:')
# tuple1 =("姓名:",n,"电话",t,"邮箱",e,"地址",a)
# print(tuple1)
#
# 1.列表的创建
# 0.创建空列表
# l1 = []
# print(l1)
# 1.创建带有元素的列表
# l2 = [1,2,4,"python",2.2]
# print(l2)
# print(type(l2))
# 2.使用list()函数转换成列表
# 0.创建空列表
# ll = []
# print(ll)
# 1.转化字符串
# l3 = list("hello")
# print(l3)
# 2.转化元组
# t1 = tuple("hello")
# l4 = list(t1)
# print(14)
# 3.转化range函数
# r1 = range(5)  # 0 1 2 3 4
# l5 = list(r1)
# print(l5)
#
# 11/21
# 使用索引访问列表的元素
l1 = ['p','y','t','y','h','q','w']
# 访问h,使用正向索引
print(l1[4])
# 访问t,使用负向索引
print(l1[-5])
#
# 使用切片形式访问列表中的元素
l2 = ['p','y','t','h','o','n']
# 使用正数切片,截取索引为2,3,4的元素,默认步长为1
print(l2[2:5])
# 取索引3-5的元素,末尾
print(l2[3:])
# 取索引0-2的元素,开头
print(l2[:3])
# 取索引1-5,步长2
print(l2[1::2])
# 使用负数切片,取后三个元素
print(l2[-3:])
# 使用负数切片,取-5~-1,步长是2的元素
print(l2[-5:-1:2])
#
# 遍历列表
# list = ['python','Java','c']
# 使用for循环遍历列表
# for item in list1:
#     print(item)
l3 = ['python','Java','c','c++','r','go','javascript']
for i in l3:
    print(i)
#
# 修改列表元素
# 修改单个元素
l4 = [10,56,34,2,56,44,7]
# 将索引为2的元素值修改为100
l4[2] = 100
print(l4)
#
# 修改多个元素
l5 = [10,56,34,2,56,44,7]
# 修改第1~4个元素的值(不包括第4个元素)
l5[1:4:1] = [45,-56,98]
print(l5)
#
# 列表中添加元素
# 1.append()用于在列表的末尾追加元素
l6 = ['a','b','c']
l6.append('f')
print(l6)
# 列表添加列表
l6.append('e','f')
print(l6)
# 
# 11/26
# extend()在列表的末尾一次添加多个元素
l13 = ['a','b','c']
l13.extend('d')
print(l13)
# 列表添加列表
l13.extend(['e','f','g','h'])
print(l13)
l13.extend('world')
print(l13)
#
# insert()在列表的特定位置添加想要添加的特定元素
l14 = ['python','c','Java']
# 插入元素，在索引为2处插入go元素
l14.insert(2,'go')
print(l14)
#
# 删除元素
# remove删除(方法是移除掉列表里面的特定元素，只会删除第一个和指定值相同的元素，必须保证该元素存在)
l15 = ['a','b','c','d']
l15.remove('a')
print(l15)
#
# pop(用来删除列表中指定索引处的元素)
l16 = [1,2,3,4,5,6,7,8,9]
l16.pop(4)
print(l16)
l16.pop()
print(l16)
#
# del(用来删除列表中单个元素或者一段连续的元素)
l17 = [1,4,8,5,6,3,2]
# 删除索引为5的元素
del l17[5]
print(l17)
# 删除8，5，6这三个元素
del l17[2:5]
print(l17)
#
# 若将列表全部删除，可使用clear()方法、
# l19 = ['a','b','c','a']
# 清空列表
# l19,clear()
# print(l19)
l18 = [5,'a',8,"python",9,5]
l18.clear()
print(l18)
#
# 任务
# 创建两个空列表name_list和phone_list，用于存储联系人姓名和电话；
# 向列表中添加联系人信息；
# 输入联系人编号修改信息；
# 输入联系人编号删除信息
# 使用clear()清空通讯录；
name_list = []
phone_list = []
while 1:
    print("菜单:1.添加联系人 2.修改联系人 3.删除联系人")
    chioce = input("请输入选择：")
    # 1.添加联系人，包括姓名，手机号
    if chioce == "1":
        name_list.append(input("请输入联系人姓名："))
        phone_list.append(input("请输入联系人手机号："))
        print(name_list)
        print(phone_list)
    # 2.修改联系人信息
    elif chioce == "2":
        num = int(input("请输入联系人编号："))
        if len(name_list) > 0 and num <=len(name_list):
            name_list[num-1] = input("修改联系人姓名：")
            phone_list[num-1] = input("修改联系电话")
        else:
            print("联系人编号输入有误")
    # 3.删除联系人信息
    elif chioce == "3":
        num = int(input("请输入联系人编号："))
        if len(name_list) > 0 and num <=len(name_list):
            name_list.pop(num-1)
            phone_list.pop(num-1)
        else:
            print("显示联系人信息")
            print(name_list)
            print(phone_list)
# 
#
#
# 11/28
# 查找元素 index()
ls1 = [1,3,5,7,'a','b',8,3,'b',2]
print(ls1.index(3))
print(ls1.index('b',6))
print(ls1.index('b',6,9))
print(ls1.index(1))
# count()方法用来统计某个元素在列表中出现的次数 列表名.count(统计的value元素)
ls2 = [1,3,5,7,'a','b',8,3,'b',2,5,5,7,1]
print(ls2.count(5))
print(ls2.count(0))
print(ls2.count('b'))
# sort()元素排序(如果指定函数，则使用指定的比较函数)
# 语法格式为：ls.sort(key=None,reverse=False)
# 1.元素是字符串的排序示例：
ls1 = ['1','3','44','23','99','88','56']
# 默认升序排序
ls3.sort()
print(ls3)
# 降序排序 reverse=True
ls3.sort(reverse=True)
print(ls3)
# 2.元素是数值的排序
ls4 = [1,3,44,23,99,88,56]
# 默认升序排序
ls4.sort()
print(ls4)
# 降序排序 reverse=True
ls4.sort(reverse=True)
print(ls4)
#
# 字典的创建
# 1.使用{}创建字典语法格式:
# 字典名 = {'key1':'value1','key2':'value2',...,'keyn':valuen}
# 使用字符串作为key
d2 = {'数学':95,'英语':90,'语文':80}
print(type(d1))
# 使用元组和数字作为key
d2 = {(20,30):'great',30:[1,2,3]}
print(type(d2))
# 创建空元组
d3 = {}
print(d3)
# 2.用dict()方法通过关键字的参数来创建字典格式:
# 字典名= dict(str1=value1,str2=value2,str3=value3)
d4 = dict(数学=90,语文=89,英语=88)
print(d4)
#
# 12/3
# 字典元素的访问
# 1.字典名[key]
d5 = {'数学': 95, '英语': 92, '语文': 84}
# 键存在,返回的是值value
print(d5['语文'])
# 键不存在,会引发一个keyerror错误
print(d5['python'])
# 2.get()方法来获取指定键对应的值,语法格式：字典名.get(key[,default])
d6 = {'数学': 95, '英语': 92, '语文': 84}
# 键存在
print(d6.get['语文'])
# 键不存在,不写default,h会返回None
print(d6.get('python'))
print(d6.get('python','该键不存在'))
# 
# 字典添加键值对
d7 = {'数学': 95, '英语': 92, '语文': 84,'python':99}
d7['可视化'] = 98
print(d7)
# 字典修改键值对
d8 = {'数学': 95, '英语': 92, '语文': 84,'python':99}
d8['英语'] = 100
print(d8)
# 字典删除键值对
d9 = {'数学': 95, '英语': 92, '语文': 84,'python':99}
# 1.使用del关键字
del d9['语文']
print(d9)
# 2.使用pop()方法
d9.pop('英语')
print(d9)